--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / vendor / rns_filesync / tests / unit / test_protocol_transfer.py
Displaying Raw • Download
vendor/rns_filesync/tests/unit/test_protocol_transfer.py 9f71f3420c18d5800afb493b723c328d23c7ea12 (9f71f342) Text, 2.38 KB
T8b949e"""Unit tests for protocol and transfer helpers."""
Tff7b72import T7ee787io
Tff7b72import T7ee787pytest
Tff7b72from T7ee787rns_filesync Tff7b72import Te6edf3protocol
Tff7b72from T7ee787rns_filesyncT7ee787.T7ee787constants Tff7b72import Te6edf3BLOCK_SIZE
Tff7b72from T7ee787rns_filesyncT7ee787.T7ee787transfer Tff7b72import Tb4b4b4(
Te6edf3apply_delta_blocksTb4b4b4,
Te6edf3build_delta_payloadTb4b4b4,
Te6edf3commit_received_fileTb4b4b4,
Te6edf3create_empty_fileTb4b4b4,
Te6edf3write_bytes_atomicTb4b4b4,
Tb4b4b4)
Te6edf3pytestmark Tff7b72= Te6edf3pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffunit
Tff7b72def Td2a8fftest_protocol_roundtripTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3raw Tff7b72= Te6edf3protocolTff7b72.Td2a8ffmake_file_requestTb4b4b4(Ta5d6ff"Ta5d6ffa/b.txtTa5d6ff"Tb4b4b4)
Te6edf3msg Tff7b72= Te6edf3protocolTff7b72.Td2a8ffdecode_messageTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72assert Te6edf3msgTb4b4b4[Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3protocolTff7b72.Td2a8ffMSG_FILE_REQUEST
Tff7b72assert Te6edf3msgTb4b4b4[Ta5d6ff"Ta5d6ffpathTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffa/b.txtTa5d6ff"
Tff7b72def Td2a8fftest_protocol_rejects_unknownTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3bad Tff7b72= Te6edf3protocolTff7b72.Td2a8ffencode_messageTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffnopeTa5d6ff"Tb4b4b4}Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Te6edf3protocolTff7b72.Td2a8ffProtocolErrorTb4b4b4)Tb4b4b4:
Te6edf3protocolTff7b72.Td2a8ffdecode_messageTb4b4b4(Te6edf3badTb4b4b4)
Tff7b72def Td2a8fftest_write_and_emptyTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffsyncTa5d6ff"
Te6edf3rootTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3path Tff7b72= Te6edf3write_bytes_atomicTb4b4b4(Tffa657strTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffnested/x.binTa5d6ff"Tb4b4b4, Ta5d6ffbTa5d6ff"Ta5d6ffabcTa5d6ff"Tb4b4b4)
Tff7b72assert Tffa657openTb4b4b4(Te6edf3pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ffbTa5d6ff"Ta5d6ffabcTa5d6ff"
Te6edf3empty Tff7b72= Te6edf3create_empty_fileTb4b4b4(Tffa657strTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffempty.txtTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3os_path_sizeTb4b4b4(Te6edf3emptyTb4b4b4) Tff7b72== T79c0ff0
Tff7b72def Td2a8ffos_path_sizeTb4b4b4(Te6edf3pathTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Tff7b72import T7ee787os
Tff7b72return Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffgetsizeTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72def Td2a8fftest_delta_applyTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787os
Te6edf3root Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffsyncTa5d6ff"
Te6edf3rootTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3original Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffATa5d6ff" Tff7b72* Te6edf3BLOCK_SIZE Tff7b72+ Ta5d6ffbTa5d6ff"Ta5d6ffBTa5d6ff" Tff7b72* Te6edf3BLOCK_SIZE Tff7b72+ Ta5d6ffbTa5d6ff"Ta5d6ffCTa5d6ff" Tff7b72* T79c0ff20
Te6edf3write_bytes_atomicTb4b4b4(Tffa657strTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fff.binTa5d6ff"Tb4b4b4, Te6edf3originalTb4b4b4)
Te6edf3dest Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Ta5d6ff"Ta5d6fff.binTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3destTb4b4b4, Ta5d6ff"Ta5d6ffr+bTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3handleTff7b72.Td2a8ffseekTb4b4b4(Te6edf3BLOCK_SIZETb4b4b4)
Te6edf3handleTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ffbTa5d6ff"Tffea00\x00Ta5d6ff" Tff7b72* Te6edf3BLOCK_SIZETb4b4b4)
Te6edf3peer Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpeer.binTa5d6ff"
Te6edf3peerTff7b72.Td2a8ffwrite_bytesTb4b4b4(Te6edf3originalTb4b4b4)
Te6edf3payload Tff7b72= Te6edf3build_delta_payloadTb4b4b4(Tffa657strTb4b4b4(Te6edf3peerTb4b4b4)Tb4b4b4, Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3apply_delta_blocksTb4b4b4(
Tffa657strTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6fff.binTa5d6ff"Tb4b4b4,
Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4,
Te6edf3ioTff7b72.Td2a8ffBytesIOTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4,
Te6edf3expected_sizeTff7b72=Tffa657lenTb4b4b4(Te6edf3originalTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72assert Tffa657openTb4b4b4(Te6edf3destTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4) Tff7b72== Te6edf3original
Tff7b72def Td2a8fftest_commit_full_and_verifyTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffsyncTa5d6ff"
Te6edf3rootTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3data Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffpayload-dataTa5d6ff"
Tff7b72import T7ee787hashlib
Tff7b72import T7ee787tempfile
Te6edf3digest Tff7b72= Te6edf3hashlibTff7b72.Td2a8ffsha256Tb4b4b4(Te6edf3dataTb4b4b4)Tff7b72.Td2a8ffhexdigestTb4b4b4(Tb4b4b4)
Te6edf3fdTb4b4b4, Te6edf3tmp Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkstempTb4b4b4(Tffa657dirTff7b72=Te6edf3rootTb4b4b4)
Te6edf3os_close_writeTb4b4b4(Te6edf3fdTb4b4b4, Te6edf3tmpTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3commit_received_fileTb4b4b4(
Tffa657strTb4b4b4(Te6edf3rootTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffout.binTa5d6ff"Tb4b4b4,
Te6edf3modeTff7b72=Ta5d6ff"Ta5d6fffullTa5d6ff"Tb4b4b4,
Te6edf3resource_dataTff7b72=Tffa657openTb4b4b4(Te6edf3tmpTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3expected_hashTff7b72=Te6edf3digestTb4b4b4,
Tb4b4b4)
Tff7b72assert Tb4b4b4(Te6edf3root Tff7b72/ Ta5d6ff"Ta5d6ffout.binTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffread_bytesTb4b4b4(Tb4b4b4) Tff7b72== Te6edf3data
Tff7b72def Td2a8ffos_close_writeTb4b4b4(Te6edf3fdTb4b4b4, Te6edf3pathTb4b4b4, Te6edf3dataTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787os
Tff7b72with Te6edf3osTff7b72.Td2a8fffdopenTb4b4b4(Te6edf3fdTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3handleTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3dataTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────